home *** CD-ROM | disk | FTP | other *** search
/ Sprite 1984 - 1993 / Sprite 1984 - 1993.iso / src / daemons / ipServer / RCS / stat.c,v < prev    next >
Encoding:
Text File  |  1989-04-10  |  15.7 KB  |  622 lines

  1. head     1.5;
  2. branch   ;
  3. access   ;
  4. symbols  ;
  5. locks    ; strict;
  6. comment  @ * @;
  7.  
  8.  
  9. 1.5
  10. date     89.04.10.16.36.03;  author mgbaker;  state Exp;
  11. branches ;
  12. next     1.4;
  13.  
  14. 1.4
  15. date     89.03.23.09.55.40;  author brent;  state Exp;
  16. branches ;
  17. next     1.3;
  18.  
  19. 1.3
  20. date     88.08.16.11.19.40;  author mendel;  state Exp;
  21. branches ;
  22. next     1.2;
  23.  
  24. 1.2
  25. date     88.04.27.09.10.03;  author brent;  state Exp;
  26. branches ;
  27. next     1.1;
  28.  
  29. 1.1
  30. date     88.04.27.08.52.14;  author brent;  state Exp;
  31. branches ;
  32. next     ;
  33.  
  34.  
  35. desc
  36. @Statitistics taking
  37. @
  38.  
  39.  
  40. 1.5
  41. log
  42. @Added ifndef sun4 to inhibit certain extraneous library routines.
  43. @
  44. text
  45. @/* 
  46.  * stat.c --
  47.  *    
  48.  *    Routines to print statistics about the IP server.
  49.  *
  50.  * Copyright 1987 Regents of the University of California
  51.  * All rights reserved.
  52.  * Permission to use, copy, modify, and distribute this
  53.  * software and its documentation for any purpose and without
  54.  * fee is hereby granted, provided that the above copyright
  55.  * notice appear in all copies.  The University of California
  56.  * makes no representations about the suitability of this
  57.  * software for any purpose.  It is provided "as is" without
  58.  * express or implied warranty.
  59.  */
  60.  
  61. #ifndef lint
  62. static char rcsid[] = "$Header: /sprite/src/daemons/ipServer/RCS/stat.c,v 1.4 89/03/23 09:55:40 brent Exp Locker: mgbaker $ SPRITE (Berkeley)";
  63. #endif not lint
  64.  
  65.  
  66. #include "sprite.h"
  67. #include "ipServer.h"
  68. #include "stat.h"
  69.  
  70. #include "time.h"
  71. #include "proc.h"
  72. #include "dev/net.h"
  73.  
  74. Stat_Info    stats;
  75.  
  76. static Proc_ResUsage    lastUsage;
  77. static void ComputeDiff();
  78. static char statDumpFile[100];
  79.  
  80.  
  81. /*
  82.  *----------------------------------------------------------------------
  83.  *
  84.  * Stat_Command --
  85.  *
  86.  *    Interprets IOC_NET_STATS command.
  87.  *
  88.  * Results:
  89.  *    None.
  90.  *
  91.  * Side effects:
  92.  *    Statistics may be updated or printed.
  93.  *
  94.  *----------------------------------------------------------------------
  95.  */
  96.  
  97. extern char myHostName[];
  98.  
  99. int
  100. Stat_Command(command)
  101.     unsigned int command;
  102. {
  103.  
  104.     switch (command & 0xFFFF) { 
  105.     case NET_STATS_RESET:
  106.         bzero((Address) &stats,sizeof(stats));
  107. #ifndef KERNEL
  108.         Sys_GetTimeOfDay(&stats.startTime, (int *) NULL, (Boolean *) NULL);
  109.         Proc_GetResUsage(PROC_MY_PID, &lastUsage);
  110. #endif
  111.         break;
  112.  
  113.     case NET_STATS_DUMP:
  114. #ifndef KERNEL
  115.         (void) sprintf(statDumpFile, 
  116.             "/tmp/ipServer.%s.%d", myHostName, command >> 16);
  117. #endif
  118.         Stat_PrintInfo(-1, -1);
  119.         break;
  120.     }
  121. }
  122.  
  123.  
  124. /*
  125.  *----------------------------------------------------------------------
  126.  *
  127.  * Stat_PrintInfo --
  128.  *
  129.  *    Prints a summary of the statistics collected so far.
  130.  *
  131.  * Results:
  132.  *    None.
  133.  *
  134.  * Side effects:
  135.  *    Statistics are printed on the standard error stream or to a file.
  136.  *
  137.  *----------------------------------------------------------------------
  138.  */
  139.  
  140. /*ARGSUSED*/
  141. int
  142. Stat_PrintInfo(sigNum, sigCode)
  143.     int        sigNum;        /* > 0 if called by signal handler. */
  144.     int        sigCode;    /* used as stat file version #. */
  145. {
  146.     Proc_ResUsage    usage;
  147.     Proc_ResUsage    diff;
  148.     Time        curTime;
  149.     int            localOffset;
  150.     char        timeString[TIME_CVT_BUF_SIZE];
  151. #ifndef KERNEL
  152.     extern unsigned int fsNumTimeoutEvents;
  153.     extern unsigned int fsNumStreamEvents;
  154.     FILE        *stream;
  155.     if (sigNum == -1) {
  156.     stream = fopen(statDumpFile, "w");
  157.     } else {
  158.     stream = stderr;
  159.     }
  160. #else
  161.     int stream = 0;
  162. #endif
  163.  
  164.     Sys_GetTimeOfDay(&curTime, &localOffset, (Boolean *) NULL);
  165. #ifndef sun4
  166.     {
  167.     char    *Version();
  168.     (void) fprintf(stream, "IP Server stats:  %s\n\n", (char *) Version());
  169.     }
  170. #endif sun4
  171.  
  172.     Time_ToAscii(stats.startTime.seconds + 60 * (localOffset+60), 
  173.         FALSE, timeString);
  174.     (void) fprintf(stream, "Started at:   %s\n", timeString);
  175.  
  176.     Time_ToAscii(curTime.seconds + 60 * (localOffset+60), FALSE, timeString);
  177.     (void) fprintf(stream, "Current time: %s\n", timeString);
  178.  
  179.     Time_Subtract(curTime, stats.startTime, &curTime);
  180.     Time_ToAscii(curTime.seconds, TRUE, timeString);
  181.     (void) fprintf(stream, "Difference:   %s\n", timeString);
  182.  
  183. #ifndef KERNEL
  184.     Proc_GetResUsage(PROC_MY_PID, &usage);
  185.     ComputeDiff(&usage, &lastUsage, &diff);
  186.     (void) fprintf(stream, "\nResource Usage:\n");
  187.     (void) fprintf(stream, " %16s %16s %11s %11s\n",
  188.         "kernel CPU", "user CPU", "invol.cs", "vol.cs");
  189.     (void) fprintf(stream, " %9d.%06d %9d.%06d %11d %11d\n",
  190.         diff.kernelCpuUsage.seconds,
  191.         diff.kernelCpuUsage.microseconds,
  192.         diff.userCpuUsage.seconds,
  193.         diff.userCpuUsage.microseconds,
  194.         diff.numQuantumEnds,
  195.         diff.numWaitEvents);
  196. #endif
  197.     (void) fprintf(stream, "Socket:\n");
  198.     (void) fprintf(stream, " %11s %11s %11s %11s %11s %11s\n",
  199.         "open","close", "read", "write", "ioctl", "select");
  200.     (void) fprintf(stream, " %11d %11d %11d %11d %11d %11d\n",
  201.         stats.sock.open,
  202.         stats.sock.close,
  203.         stats.sock.read,
  204.         stats.sock.write,
  205.         stats.sock.ioctl,
  206.         stats.sock.select);
  207.     (void) fprintf(stream, " %11s %11s %11s %11s %11s %11s\n",
  208.         "append", "app.part", "part.bytes", "app.fail", "remove", "fetch");
  209.     (void) fprintf(stream, " %11d %11d %11d %11d %11d %11d\n",
  210.         stats.sock.buffer.append,
  211.         stats.sock.buffer.appendPartial,
  212.         stats.sock.buffer.appPartBytes,
  213.         stats.sock.buffer.appendFail,
  214.         stats.sock.buffer.remove,
  215.         stats.sock.buffer.fetch);
  216.     (void) fprintf(stream, " %11s %11s %11s %11s %11s %11s\n",
  217.         "copies", "bytes copied", "rte $hits %", "dispatches", 
  218.         "timeouts", "streams");
  219.     (void) fprintf(stream, " %11d %11d %11d %11d %11d %11d\n",
  220.         stats.sock.buffer.copy,
  221.         stats.sock.buffer.copyBytes,
  222.         (stats.misc.routeCalls != 0 ? 
  223.         (100*stats.misc.routeCacheHits)/stats.misc.routeCalls : 0),
  224.         stats.misc.dispatchLoop,
  225. #ifndef KERNEL
  226.         fsNumTimeoutEvents,
  227.         fsNumStreamEvents);
  228. #else
  229.         0, 0);
  230. #endif
  231.  
  232.  
  233.     (void) fprintf(stream, "\n");
  234.  
  235.     (void) fprintf(stream, "TCP:\n");
  236.     (void) fprintf(stream, " %11s %11s %11s %11s %11s %11s\n",
  237.         "send: total", "data bytes", "data pack","ack only", "win probe", 
  238.         "win update");
  239.     (void) fprintf(stream, " %11d %11d %11d %11d %11d %11d\n",
  240.         stats.tcp.send.total,
  241.         stats.tcp.send.byte,
  242.         stats.tcp.send.pack,
  243.         stats.tcp.send.acks,
  244.         stats.tcp.send.probe,
  245.         stats.tcp.send.winUpdate);
  246.     (void) fprintf(stream, " %11s %11s %11s %11s %11s %11s\n",
  247.         "recv: total","bad", "data: ok","dupl.", "part dupl.", "bad order");
  248.     (void) fprintf(stream, " %11d %11d %11d %11d %11d %11d\n",
  249.         stats.tcp.recv.total,
  250.         stats.tcp.recv.badChecksum +
  251.         stats.tcp.recv.badOffset +
  252.         stats.tcp.recv.shortLen,
  253.         stats.tcp.recv.pack,
  254.         stats.tcp.recv.dupPack,
  255.         stats.tcp.recv.partDupPack,
  256.         stats.tcp.recv.ooPack);
  257.     (void) fprintf(stream, " %11s %11s %11s %11s %11s %11s\n",
  258.         "data bytes", "data > win", "after close", "win probe", 
  259.         "win update","");
  260.     (void) fprintf(stream, " %11d %11d %11d %11d %11d %11d\n",
  261.         stats.tcp.recv.byte,
  262.         stats.tcp.recv.packAfterWin,
  263.         stats.tcp.recv.afterClose,
  264.         stats.tcp.recv.winProbe,
  265.         stats.tcp.recv.winUpd,
  266.         0);
  267.     (void) fprintf(stream, " %11s %11s %11s %11s %11s %11s\n",
  268.         "acks", "dupl. ack", "ack > win", "urgent", "urg only","");
  269.     (void) fprintf(stream, " %11d %11d %11d %11d %11d %11d\n",
  270.         stats.tcp.recv.ackPack,
  271.         stats.tcp.recv.dupAck,
  272.         stats.tcp.recv.ackTooMuch,
  273.         stats.tcp.recv.urgent,
  274.         stats.tcp.recv.urgentOnly,
  275.         0);
  276.     (void) fprintf(stream, " %11s %11s %11s %11s %11s %11s\n",
  277.         "timer: tot.", "delay ack","retrans", "retr.drop", "persist", 
  278.         "2*msl");
  279.     (void) fprintf(stream, " %11d %11d %11d %11d %11d %11d\n",
  280.         stats.tcp.timerCalls,
  281.         stats.tcp.delayAck,
  282.         stats.tcp.rexmtTimeout,
  283.         stats.tcp.timeoutDrop,
  284.         stats.tcp.persistTimeout,
  285.         stats.tcp.mslTimeout);
  286.     (void) fprintf(stream, " %11s %11s %11s\n",
  287.         "total keeps", "dropped", "probes");
  288.     (void) fprintf(stream, " %11d %11d %11d\n",
  289.         stats.tcp.keepTimeout,
  290.         stats.tcp.keepDrops,
  291.         stats.tcp.keepProbe);
  292.  
  293.     (void) fprintf(stream, "\n");
  294.     (void) fprintf(stream, "UDP:\n");
  295.     (void) fprintf(stream, " %11s %11s %11s %11s %11s %11s\n",
  296.         "recv: total", "accepts", "deamons", "bad", "#bytes", "acc.bytes");
  297.     (void) fprintf(stream, " %11d %11d %11d %11d %11d %11d\n",
  298.         stats.udp.recv.total,
  299.         stats.udp.recv.accepted,
  300.         stats.udp.recv.daemon,
  301.         stats.udp.recv.shortLen+
  302.         stats.udp.recv.badChecksum,
  303.         stats.udp.recv.dataLen,
  304.         stats.udp.recv.acceptLen);
  305.     (void) fprintf(stream, " %11s %11s\n",
  306.         "send: total", "#bytes");
  307.     (void) fprintf(stream, " %11d %11d\n",
  308.         stats.udp.send.total,
  309.         stats.udp.send.dataLen);
  310.  
  311.     (void) fprintf(stream, "\n");
  312.     (void) fprintf(stream, "ICMP:\n");
  313.     (void) fprintf(stream, " %11s %11s %11s %11s %11s\n",
  314.         "recv: total", "short", "bad sum", "bad type", "bad code");
  315.     (void) fprintf(stream, " %11d %11d %11d %11d %11d\n",
  316.         stats.icmp.total, 
  317.         stats.icmp.shortLen, 
  318.         stats.icmp.badChecksum, 
  319.         stats.icmp.badType, 
  320.         stats.icmp.badCode);
  321.     (void) fprintf(stream, " %11s %11s %11s %11s %11s\n",
  322.       "unreachable", "redirect", "src quench", "time exceed", "param prob");
  323.     (void) fprintf(stream, " %11d %11d %11d %11d %11d\n",
  324.         stats.icmp.inHistogram[NET_ICMP_UNREACHABLE],
  325.         stats.icmp.inHistogram[NET_ICMP_REDIRECT],
  326.         stats.icmp.inHistogram[NET_ICMP_SOURCE_QUENCH],
  327.         stats.icmp.inHistogram[NET_ICMP_TIME_EXCEED],
  328.         stats.icmp.inHistogram[NET_ICMP_PARAM_PROB]);
  329.     (void) fprintf(stream, " %11s %11s %11s %11s\n",
  330.         "echo", "timestamp", "info", "mask");
  331.     (void) fprintf(stream, " %11d %11d %11d %11d\n",
  332.         stats.icmp.inHistogram[NET_ICMP_ECHO],
  333.         stats.icmp.inHistogram[NET_ICMP_TIMESTAMP],
  334.         stats.icmp.inHistogram[NET_ICMP_INFO_REQ],
  335.         stats.icmp.inHistogram[NET_ICMP_MASK_REQ]);
  336.  
  337.     (void) fprintf(stream, "\n");
  338.     (void) fprintf(stream, "IP:\n");
  339.     (void) fprintf(stream, " %11s %11s %11s %11s %11s\n",
  340.         "recv: total", "frags","short", "bad sum", "not for us");
  341.     (void) fprintf(stream, " %11d %11d %11d %11d %11d\n",
  342.         stats.ip.totalRcv,
  343.         stats.ip.fragsRcv,
  344.         stats.ip.shortPacket + stats.ip.shortHeader + 
  345.         stats.ip.shortLen,
  346.         stats.ip.badChecksum,
  347.         stats.ip.forwards);
  348.     (void) fprintf(stream, " %11s %11s %11s %11s %11s %11s\n",
  349.         "send: total", "whole","fragmented", "#frags", "dont frag",
  350.         "TO calls");
  351.     (void) fprintf(stream, " %11d %11d %11d %11d %11d %11d\n",
  352.         stats.ip.wholeSent+ stats.ip.fragOnSend,
  353.         stats.ip.wholeSent,
  354.         stats.ip.fragOnSend,
  355.         stats.ip.fragsSent,
  356.         stats.ip.dontFragment,
  357.         stats.ip.fragTimeouts);
  358.  
  359.     (void) fprintf(stream, "\n");
  360.     (void) fprintf(stream, "Raw:\n");
  361.     (void) fprintf(stream, " %11s %11s %11s %11s\n",
  362.         "recv: total", "accepted","send: total", "#bytes");
  363.     (void) fprintf(stream, " %11d %11d %11d %11d\n",
  364.         stats.raw.recv.total,
  365.         stats.raw.recv.accepted,
  366.         stats.raw.send.total,
  367.         stats.raw.send.dataLen);
  368.     (void) fflush(stream);
  369. }
  370.  
  371. static void
  372. ComputeDiff(newPtr, oldPtr, diffPtr)
  373.     register Proc_ResUsage    *newPtr;
  374.     register Proc_ResUsage    *oldPtr;
  375.     register Proc_ResUsage    *diffPtr;
  376. {
  377.     Time_Subtract(newPtr->kernelCpuUsage, oldPtr->kernelCpuUsage, 
  378.             &diffPtr->kernelCpuUsage);
  379.     Time_Subtract(newPtr->userCpuUsage, oldPtr->userCpuUsage, 
  380.             &diffPtr->userCpuUsage);
  381.     diffPtr->numQuantumEnds = newPtr->numQuantumEnds - oldPtr->numQuantumEnds;
  382.     diffPtr->numWaitEvents  = newPtr->numWaitEvents  - oldPtr->numWaitEvents;
  383. }
  384. @
  385.  
  386.  
  387. 1.4
  388. log
  389. @Added #ifdef KERNEL because certain statistics don't apply.
  390. @
  391. text
  392. @d18 1
  393. a18 1
  394. static char rcsid[] = "$Header: stat.c,v 1.3 88/08/16 11:19:40 mendel Exp $ SPRITE (Berkeley)";
  395. d121 1
  396. d126 1
  397. @
  398.  
  399.  
  400. 1.3
  401. log
  402. @Converted to use new libc.a
  403. @
  404. text
  405. @d18 1
  406. a18 1
  407. static char rcsid[] = "$Header: stat.c,v 1.2 88/04/27 09:10:03 brent Exp $ SPRITE (Berkeley)";
  408. d23 1
  409. a28 1
  410. #include <stdio.h>
  411. d63 1
  412. d66 1
  413. d70 1
  414. d73 1
  415. a101 2
  416.     extern unsigned int fsNumTimeoutEvents;
  417.     extern unsigned int fsNumStreamEvents;
  418. d107 3
  419. a110 1
  420.  
  421. d116 3
  422. a119 1
  423.     Proc_GetResUsage(PROC_MY_PID, &usage);
  424. d137 2
  425. d150 1
  426. a150 1
  427.  
  428. d179 1
  429. d182 3
  430. @
  431.  
  432.  
  433. 1.2
  434. log
  435. @New update with Jacobson enhancements
  436. @
  437. text
  438. @d18 1
  439. a18 1
  440. static char rcsid[] = "$Header: stat.c,v 6.3 88/04/24 23:07:34 andrew Exp $ SPRITE (Berkeley)";
  441. a24 1
  442. #include "io.h"
  443. a25 2
  444. #include "fs.h"
  445. #include "sys.h"
  446. d28 1
  447. a28 1
  448. #include "byte.h"
  449. d62 1
  450. a62 1
  451.         Byte_Zero(sizeof(stats), (Address) &stats);
  452. d68 1
  453. a68 1
  454.         Io_PrintString(statDumpFile, 
  455. d105 1
  456. a105 1
  457.     Io_Stream        stream;
  458. d108 1
  459. a108 1
  460.     stream = Io_Open(statDumpFile, "w");
  461. d110 1
  462. a110 1
  463.     stream = io_StdErr;
  464. d115 4
  465. a119 2
  466.     Io_PrintStream(stream, "IP Server stats:  %s\n\n", Version());
  467.  
  468. d122 1
  469. a122 1
  470.     Io_PrintStream(stream, "Started at:   %s\n", timeString);
  471. d125 1
  472. a125 1
  473.     Io_PrintStream(stream, "Current time: %s\n", timeString);
  474. d129 1
  475. a129 1
  476.     Io_PrintStream(stream, "Difference:   %s\n", timeString);
  477. d132 2
  478. a133 2
  479.     Io_PrintStream(stream, "\nResource Usage:\n");
  480.     Io_PrintStream(stream, " %16s %16s %11s %11s\n",
  481. d135 1
  482. a135 1
  483.     Io_PrintStream(stream, " %9d.%06d %9d.%06d %11d %11d\n",
  484. d143 2
  485. a144 2
  486.     Io_PrintStream(stream, "Socket:\n");
  487.     Io_PrintStream(stream, " %11s %11s %11s %11s %11s %11s\n",
  488. d146 1
  489. a146 1
  490.     Io_PrintStream(stream, " %11d %11d %11d %11d %11d %11d\n",
  491. d153 1
  492. a153 1
  493.     Io_PrintStream(stream, " %11s %11s %11s %11s %11s %11s\n",
  494. d155 1
  495. a155 1
  496.     Io_PrintStream(stream, " %11d %11d %11d %11d %11d %11d\n",
  497. d162 1
  498. a162 1
  499.     Io_PrintStream(stream, " %11s %11s %11s %11s %11s %11s\n",
  500. d165 1
  501. a165 1
  502.     Io_PrintStream(stream, " %11d %11d %11d %11d %11d %11d\n",
  503. d175 1
  504. a175 1
  505.     Io_PrintStream(stream, "\n");
  506. d177 2
  507. a178 2
  508.     Io_PrintStream(stream, "TCP:\n");
  509.     Io_PrintStream(stream, " %11s %11s %11s %11s %11s %11s\n",
  510. d181 1
  511. a181 1
  512.     Io_PrintStream(stream, " %11d %11d %11d %11d %11d %11d\n",
  513. d188 1
  514. a188 1
  515.     Io_PrintStream(stream, " %11s %11s %11s %11s %11s %11s\n",
  516. d190 1
  517. a190 1
  518.     Io_PrintStream(stream, " %11d %11d %11d %11d %11d %11d\n",
  519. d199 1
  520. a199 1
  521.     Io_PrintStream(stream, " %11s %11s %11s %11s %11s %11s\n",
  522. d202 1
  523. a202 1
  524.     Io_PrintStream(stream, " %11d %11d %11d %11d %11d %11d\n",
  525. d209 1
  526. a209 1
  527.     Io_PrintStream(stream, " %11s %11s %11s %11s %11s %11s\n",
  528. d211 1
  529. a211 1
  530.     Io_PrintStream(stream, " %11d %11d %11d %11d %11d %11d\n",
  531. d218 1
  532. a218 1
  533.     Io_PrintStream(stream, " %11s %11s %11s %11s %11s %11s\n",
  534. d221 1
  535. a221 1
  536.     Io_PrintStream(stream, " %11d %11d %11d %11d %11d %11d\n",
  537. d228 1
  538. a228 1
  539.     Io_PrintStream(stream, " %11s %11s %11s\n",
  540. d230 1
  541. a230 1
  542.     Io_PrintStream(stream, " %11d %11d %11d\n",
  543. d235 3
  544. a237 3
  545.     Io_PrintStream(stream, "\n");
  546.     Io_PrintStream(stream, "UDP:\n");
  547.     Io_PrintStream(stream, " %11s %11s %11s %11s %11s %11s\n",
  548. d239 1
  549. a239 1
  550.     Io_PrintStream(stream, " %11d %11d %11d %11d %11d %11d\n",
  551. d247 1
  552. a247 1
  553.     Io_PrintStream(stream, " %11s %11s\n",
  554. d249 1
  555. a249 1
  556.     Io_PrintStream(stream, " %11d %11d\n",
  557. d253 3
  558. a255 3
  559.     Io_PrintStream(stream, "\n");
  560.     Io_PrintStream(stream, "ICMP:\n");
  561.     Io_PrintStream(stream, " %11s %11s %11s %11s %11s\n",
  562. d257 1
  563. a257 1
  564.     Io_PrintStream(stream, " %11d %11d %11d %11d %11d\n",
  565. d263 1
  566. a263 1
  567.     Io_PrintStream(stream, " %11s %11s %11s %11s %11s\n",
  568. d265 1
  569. a265 1
  570.     Io_PrintStream(stream, " %11d %11d %11d %11d %11d\n",
  571. d271 1
  572. a271 1
  573.     Io_PrintStream(stream, " %11s %11s %11s %11s\n",
  574. d273 1
  575. a273 1
  576.     Io_PrintStream(stream, " %11d %11d %11d %11d\n",
  577. d279 3
  578. a281 3
  579.     Io_PrintStream(stream, "\n");
  580.     Io_PrintStream(stream, "IP:\n");
  581.     Io_PrintStream(stream, " %11s %11s %11s %11s %11s\n",
  582. d283 1
  583. a283 1
  584.     Io_PrintStream(stream, " %11d %11d %11d %11d %11d\n",
  585. d290 1
  586. a290 1
  587.     Io_PrintStream(stream, " %11s %11s %11s %11s %11s %11s\n",
  588. d293 1
  589. a293 1
  590.     Io_PrintStream(stream, " %11d %11d %11d %11d %11d %11d\n",
  591. d301 3
  592. a303 3
  593.     Io_PrintStream(stream, "\n");
  594.     Io_PrintStream(stream, "Raw:\n");
  595.     Io_PrintStream(stream, " %11s %11s %11s %11s\n",
  596. d305 1
  597. a305 1
  598.     Io_PrintStream(stream, " %11d %11d %11d %11d\n",
  599. d310 1
  600. a310 1
  601.     Io_Flush(stream);
  602. @
  603.  
  604.  
  605. 1.1
  606. log
  607. @Initial revision
  608. @
  609. text
  610. @d18 1
  611. a18 1
  612. static char rcsid[] = "$Header: stat.c,v 6.0 87/09/08 15:58:52 andrew Stable $ SPRITE (Berkeley)";
  613. d31 1
  614. d65 1
  615. a65 1
  616.         Byte_Zero(sizeof(stats), &stats);
  617. d95 1
  618. d169 1
  619. a169 1
  620.         (stats.misc.routeCalls > 0 ? 
  621. @
  622.